/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkgMetodoPyramid.pkgMetodo;

import pkgMetodoPyramid.pkgSoporte.ENUM_METODO_PYRAMID;
import pkgMetodoPyramid.pkgNegocio.EntityPyramid;

/**
 *
 * @author Administrador
 */
public class MethodPyramid {

    public static OutputPyramid calcular(InputPyramid input) throws CalculationPyramidException {
        OutputPyramid output = null;
        try {

            EntityPyramid entity = input.getEntity();

            Double porcVarones = entity.getVarones().doubleValue() / input.getTotalVarones().doubleValue();
            Double porcMujeres = entity.getMujeres().doubleValue() / input.getTotalMujeres().doubleValue();
            Double porcTotalVarones = entity.getVarones().doubleValue() / input.getTotalPablacion().doubleValue();
            Double porcTotalMujeres = entity.getMujeres().doubleValue() / input.getTotalPablacion().doubleValue();

            entity.setPorc_varones(porcVarones*100);
            entity.setPorc_mujers(porcMujeres*100);
            entity.setPorc_vtotal(porcTotalVarones*100);
            entity.setPorc_mtotal(porcTotalMujeres*100);

            output = new OutputPyramid();
            output.setEntity(entity);
            output.setTotalVarones(input.getTotalVarones());
            output.setTotalMujeres(input.getTotalMujeres());
            output.setTotalPablacion(input.getTotalPablacion());

        } catch (Exception ex) {
            throw new CalculationPyramidException();
        }

        return output;
    }

    public static void validarInput(InputPyramid input) throws InvalidInputPyramidException {
        if (input == null) {
            throw new InvalidInputPyramidException();
        }

        if (input.getTotalVarones() == null || input.getTotalVarones() <= 0) {
            throw new InvalidInputPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_TOTALVARONES.toString());
        }
        if (input.getTotalMujeres() == null || input.getTotalMujeres() <= 0) {
            throw new InvalidInputPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_TOTALMUJERES.toString());
        }
        if (input.getTotalPablacion() == null || input.getTotalPablacion() <= 0) {
            throw new InvalidInputPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_TOTALPOBLACION.toString());
        }
        EntityPyramid entity = input.getEntity();
        if (entity == null) {
            throw new InvalidInputPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_ENTITY_NULL.toString());
        }

        if (entity.getEdad() == null) {
            InvalidEntityPyramidException invalidEntity = new InvalidEntityPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_VALUE_EDAD_NULL.toString(), InvalidEntityPyramidException.cod_value_edad_invalid);
            InvalidInputPyramidException inputIvalid = new InvalidInputPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_VALUE_EDAD_NULL.toString());
            inputIvalid.setInvalidEntityException(invalidEntity);
            throw inputIvalid;
        }

        if (entity.getVarones() == null || entity.getVarones() < 0) {
            InvalidEntityPyramidException invalidEntity = new InvalidEntityPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_VALUE_VARONES.toString(), InvalidEntityPyramidException.cod_value_varones_invalid);
            InvalidInputPyramidException inputIvalid = new InvalidInputPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_VALUE_VARONES.toString());
            inputIvalid.setInvalidEntityException(invalidEntity);
            throw inputIvalid;
        }

        if (entity.getMujeres() == null || entity.getMujeres() < 0) {
            InvalidEntityPyramidException invalidEntity = new InvalidEntityPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_VALUE_MUJERES.toString(), InvalidEntityPyramidException.cod_value_mujeres_invalid);
            InvalidInputPyramidException inputIvalid = new InvalidInputPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_VALUE_MUJERES.toString());
            inputIvalid.setInvalidEntityException(invalidEntity);
            throw inputIvalid;
        }

    }

    public static boolean validarTotal(Integer total) {
        if (total == null || total.intValue() <= 0) {
            return false;
        }
        return true;
    }

    public static void validarEntityPyramid(EntityPyramid entity) throws InvalidEntityPyramidException {
        if (entity.getEdad() == null) {
            throw new InvalidEntityPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_VALUE_EDAD_NULL.toString(), InvalidEntityPyramidException.cod_value_edad_invalid);
        }

        if (entity.getVarones() == null || entity.getVarones() < 0) {
            throw new InvalidEntityPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_VALUE_VARONES.toString(), InvalidEntityPyramidException.cod_value_varones_invalid);
        }

        if (entity.getMujeres() == null || entity.getMujeres() < 0) {
            throw new InvalidEntityPyramidException(ENUM_METODO_PYRAMID.ERROR_INPUT.ERROR_INVALID_VALUE_MUJERES.toString(), InvalidEntityPyramidException.cod_value_mujeres_invalid);
        }

    }
}
